package com.escool.controller;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.escool.model.TbCatMateriaTempDet;
import com.escool.model.TbGrado;
import com.escool.model.TbMateria;
import com.escool.model.TbNivel;

import com.escool.model.TbSedeSeccionHasMateria;


import com.escool.service.CatMateriaTempService;
import com.escool.service.SeccionHasMateriaService;
import com.escool.service.GradosService;
import com.escool.service.NivelesService;
import com.escool.service.RolService;
import com.escool.service.VinSedeSeccionService;

@Controller
public class SeccionHasMateriaController {
	
	@Autowired
	SeccionHasMateriaService seccionHasMateriaService;

	@Autowired
	VinSedeSeccionService VinSedeSeccionService;
	
	@Autowired
	CatMateriaTempService CatMateriaTempService;

	
	@RequestMapping("showSeccionHasMateriaService")
	public String showSeccionHasMateriaService(Map<String, Object> map,HttpServletRequest request){
		String id = request.getParameter("id");
		TbSedeSeccionHasMateria tb = new TbSedeSeccionHasMateria();
		tb.setTbSedeHasSeccion(VinSedeSeccionService.findTbSedeHasSeccion(Integer.parseInt(id)));
		map.put("tbSeccionHasMateriaService", tb);
		map.put("TbSedeSeccionHasMateriaList", seccionHasMateriaService.listTbSedeSeccionHasMateria(tb.getTbSedeHasSeccion().getIdSedeHasSeccion()));
		return "/seccionHasMateriaService";
	}
	
	@RequestMapping(value = "addSeccionHasMateriaService", method = RequestMethod.POST)
	public String addRoles(@ModelAttribute("tbSeccionHasMateriaService") @Valid TbSedeSeccionHasMateria tbSeccionHasMateriaService, BindingResult result){
		if (!result.hasErrors()) {
			try{
				seccionHasMateriaService.addTbSedeSeccionHasMateria(tbSeccionHasMateriaService);	
			}
			catch(DataAccessException ex){
				ex.printStackTrace();
			}
			
			return "redirect:/showSeccionHasMateriaService?id="+tbSeccionHasMateriaService.getTbSedeHasSeccion().getIdSedeHasSeccion();
		}
		return "";
	}
	
	@RequestMapping(value = "editSeccionHasMateriaService", method = RequestMethod.POST)
	public String editRoles(@ModelAttribute("tbSeccionHasMateriaService") @Valid TbSedeSeccionHasMateria tbSeccionHasMateriaService, BindingResult result){
		if (!result.hasErrors()) {
			try{
				seccionHasMateriaService.editTbSedeSeccionHasMateria(tbSeccionHasMateriaService);
			}
			catch(DataAccessException ex){
				ex.printStackTrace();
			}
			
			
			return "redirect:/showSeccionHasMateriaService?id="+tbSeccionHasMateriaService.getTbSedeHasSeccion().getIdSedeHasSeccion();
		}
		return "";
	}
	
	@RequestMapping(value = "deleteSeccionHasMateriaService", method = RequestMethod.POST)
	public String delRoles(@ModelAttribute("tbSeccionHasMateriaService") @Valid TbSedeSeccionHasMateria tbSeccionHasMateriaService, BindingResult result){
		if (!result.hasErrors()) {
			try{
				seccionHasMateriaService.delTbSedeSeccionHasMateria(tbSeccionHasMateriaService.getIdSedeSeccionHasMateria());
			}
			catch(DataAccessException ex){
				ex.printStackTrace();
			}
			
			return "redirect:/showSeccionHasMateriaService?id="+tbSeccionHasMateriaService.getTbSedeHasSeccion().getIdSedeHasSeccion();
		}
		return "";
	}
	
	@RequestMapping(value = "cargarSeccionHasMateriaService", method = RequestMethod.POST)
	public String cargarSeccionHasMateriaService(@ModelAttribute("tbSeccionHasMateriaService") @Valid TbSedeSeccionHasMateria tbSeccionHasMateriaService, BindingResult result){
		if (!result.hasErrors()) {
			try{
				
				List datos = 	CatMateriaTempService.listTbCatMateriaTempDet(Integer.parseInt(tbSeccionHasMateriaService.getIdMateriaTemp()));
				if(!datos.isEmpty()){
					Iterator it = datos.iterator(); 
					while(it.hasNext()){
						TbCatMateriaTempDet dto = (TbCatMateriaTempDet)it.next();
						TbSedeSeccionHasMateria sdsecc = new TbSedeSeccionHasMateria();
						sdsecc.setTbSedeHasSeccion(tbSeccionHasMateriaService.getTbSedeHasSeccion());
						sdsecc.setTbMateria(dto.getTbMateria());
						seccionHasMateriaService.addTbSedeSeccionHasMateria(sdsecc);
						
					}
				}
				
				
				
			}
			catch(DataAccessException ex){
				ex.printStackTrace();
			}
			
			return "redirect:/showSeccionHasMateriaService?id="+tbSeccionHasMateriaService.getTbSedeHasSeccion().getIdSedeHasSeccion();
		}
		return "";
	}

}
